home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / strategy / xshisen-.001 / xshisen-~ / xshisen-1.35 / image.C < prev    next >
C/C++ Source or Header  |  1996-01-22  |  3KB  |  82 lines

  1. #include <stdlib.h>
  2. #include "components.h"
  3.  
  4. Pixmap
  5. ResizePixmap(Pixmap original, GC gc,
  6.              unsigned int new_width, unsigned int new_height)
  7. {
  8.     XImage *orig_image, *new_image;
  9.     unsigned int orig_width, orig_height;
  10.     unsigned int dummy, depth;
  11.     int    dummy_x, dummy_y;
  12.     int    bitmap_pad;
  13.     Window win;
  14.     Display *disp = XtDisplay(toplevel);
  15.     int     scno = XDefaultScreen(disp);
  16.     int     x, y, xo, yo;
  17.     double  x_scale_factor, y_scale_factor;
  18.     Pixmap  new_pixmap;
  19.  
  20.     XGetGeometry(disp, original, &win,
  21.                  &dummy_x, &dummy_y, &orig_width, &orig_height, &dummy, &depth);
  22.     orig_image = XGetImage(disp, original,
  23.                            0, 0, orig_width, orig_height, AllPlanes, ZPixmap);
  24.     bitmap_pad = (depth>16)?32:((depth>8)?16:8);
  25.     new_image = XCreateImage(disp, XDefaultVisual(disp, scno), depth, ZPixmap,
  26.                              0, NULL, new_width, new_height, bitmap_pad, 0);
  27.     new_image->data = (char *)malloc(new_image->bytes_per_line * new_height);
  28.     x_scale_factor = ((double)orig_width - 1.0)/ ((double)new_width - 1.0);
  29.     y_scale_factor = ((double)orig_height- 1.0)/ ((double)new_height - 1.0);
  30.     for(y=0; y<new_height; y++) {
  31.         yo = (int)(0.5 + y * y_scale_factor);
  32.         if (yo >= orig_height)
  33.             yo = orig_height-1;
  34.         for(x=0; x<new_width; x++) {
  35.             xo = (int)(0.5 + x * x_scale_factor);
  36.             if (xo >= orig_width)
  37.                 xo = orig_width-1;
  38.             XPutPixel(new_image, x, y, XGetPixel(orig_image, xo, yo));
  39.         }
  40.     }
  41.     new_pixmap = XCreatePixmap(disp, win, new_width, new_height, depth);
  42.     XPutImage(disp, new_pixmap, gc, new_image, 0, 0, 0, 0, new_width, new_height);
  43.     XDestroyImage(new_image);
  44.     return new_pixmap;
  45. }
  46.  
  47. Pixmap
  48. MakeHalfBrightPixmap(Pixmap original, GC gc)
  49. {
  50.     XImage *orig_image, *new_image;
  51.     unsigned int width, height;
  52.     unsigned int dummy, depth;
  53.     int    dummy_x, dummy_y;
  54.     int    bitmap_pad;
  55.     Window win;
  56.     Display *disp = XtDisplay(toplevel);
  57.     int     scno = XDefaultScreen(disp);
  58.     int     x, y;
  59.     Pixmap  new_pixmap;
  60.  
  61.     XGetGeometry(disp, original, &win,
  62.                  &dummy_x, &dummy_y, &width, &height, &dummy, &depth);
  63.     orig_image = XGetImage(disp, original,
  64.                            0, 0, width, height, AllPlanes, ZPixmap);
  65.     bitmap_pad = (depth>16)?32:((depth>8)?16:8);
  66.     new_image = XCreateImage(disp, XDefaultVisual(disp, scno), depth, ZPixmap,
  67.                              0, NULL, width, height, bitmap_pad, 0);
  68.     new_image->data = (char *)malloc(new_image->bytes_per_line * height);
  69.     for(y=0; y<height; y++) {
  70.         for(x=0; x<width; x++) {
  71.             if ((x+y)%2 == 0)
  72.                 XPutPixel(new_image, x, y, BlackPixel(disp, scno));
  73.             else
  74.                 XPutPixel(new_image, x, y, XGetPixel(orig_image, x, y));
  75.         }
  76.     }
  77.     new_pixmap = XCreatePixmap(disp, win, width, height, depth);
  78.     XPutImage(disp, new_pixmap, gc, new_image, 0, 0, 0, 0, width, height);
  79.     XDestroyImage(new_image);
  80.     return new_pixmap;
  81. }
  82.